(function () {
  const _prev = Symbol('_prev')
  const _next = Symbol('_next')
  // 元素节点
  class ElementNode {
    constructor({ prev, next, element }) {
      Object.defineProperties(this, {
        [_prev]: { // 前驱 
          value: prev,
          enumerable: false,
          writable: true
        },
        [_next]: { // 后继
          value: next,
          enumerable: false,
          writable: true
        }
      });
      this.element = element // 当前元素的数据部分，公有属性
    }


    getPrev() {
      return this[_prev]
    }
    setPrev(prev) {
      this[_prev] = prev;
    }
    getNext() {
      return this[_next];
    }
    setNext(next) {
      this[_next] = next;
    }
  }

  if (typeof module !== 'undefined' && typeof module.exports !== 'undefined' && typeof exports !== 'undefined') {
    module.exports = ElementNode;
  } else if (typeof window) {
    window.ElementNode = ElementNode;
  }
})()


